import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
 * @lc app=leetcode.cn id=605 lang=java
 *
 * [605] 种花问题
 */

// @lc code=start
class Solution {
    // Int数组转list可真麻烦，没有简单的方法么。
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        // 感觉意思就是找三个相邻的0，那么中间那个0是可以种一朵花的。
        // 特殊情况是边缘，边缘是墙也没问题。
        // 其实这种情况最好的是给前后各加一个0，这样就不用特殊处理边缘。
        int count = 0;//随着遍历记录可以种花的数目，如果它大于等于0就返回true，否则false;
        // List<Integer> list = new ArrayList(Arrays.asList(flowerbed));
        // List<Integer> list = Arrays.asList(flowerbed);//这这个貌似只适用于Integer[]数组的情况，不适用于int[]数组的情况
        // List<Integer> list = Ints.asList(flowerbed);//leetcode没有这个包
        List<Integer> list = Arrays.stream(flowerbed).boxed().collect(Collectors.toList());
        list.add(0, 0);
        list.add(list.size(), 0);
        //在首位,末尾各加一个0，防止特殊化处理首位。
        for(int i =1;i<list.size()-1 ;i++){
            if(list.get(i)+list.get(i+1)+list.get(i-1)==0){
                list.set(i, 1);//置为1
                count++;
            }
            if(count>=n){
                return true;
            }
        }
        return false;
    }
}
// @lc code=end

